#ifndef SORT_H
#define SORT_H

#include <iostream>
using namespace std;

/**
 * Gestion des sorts de mage. Un sort est décrit par :\n
 * 1) son école,\n
 * 2) son niveau,\n
 * 3) un numéro (dans l'ordre alphabétique).\n
 * 
 */
class Sort
{
 public:
  Sort(const unsigned int& ecole = 0, const unsigned int& niveau = 1,
       const unsigned int& numero = 0);
  Sort(const Sort& m_sort);
  ~Sort();
  bool operator<(const Sort& m_sort) const;
  bool operator>(const Sort& m_sort) const;
  bool operator==(const Sort& m_sort) const;
  unsigned int getEcole() const;
  unsigned int getNiveau() const;
  unsigned int getNumero() const;
  /** Permet d'effectuer un affichage simple d'un sort.
   * On met sur une ligne l'école (que l'on aligne sur 2 caractères), le
   * niveau et le numéro (lui aussi aligné sur 2 caractères).
   *
   * @param out le flot de sortie désiré (cout, info(), un fichier, ...)
   * @param m_sort le sort à afficher
   * @return le flot de sortie modifié
   */
  friend ostream& operator<<(ostream& out, const Sort& m_sort);
 protected:
  /*
   * Ecole, niveau et numéro du sort.
   */
  unsigned int
    Ecole,  /**< Numéro de l'école de magie (entre 1 et 21) */
    Niveau, /**< Niveau du sort */
    Numero; /**< Numéro du sort, qui est attribué par ordre alphabétique */
};

#endif // SORT_H
